home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format CD 44
/
Amiga Format CD44 (1999-08-26)(Future Publishing)(GB)(Track 1 of 3)[!][issue 1999-10].iso
/
-serious-
/
misc
/
cmq060
/
source
/
cmq060move16.include.s
< prev
next >
Wrap
Text File
|
1999-07-26
|
5KB
|
187 lines
*************************************
* CopyMemQuicker060 with Move16 *
* Include File V1.4 *
* written by Dirk Busse *
* 3. Apr. 1999 *
*************************************
PatchStart
tst.l d0
beq.b squit
move.w a1,d1 ;Zieladresse nach d1 (nur die ersten zwei Bits werden benötigt)
btst #0,d1
beq.b .skip1
move.b (a0)+,(a1)+ ;Zieladresse auf EVEN setzen
subq.l #1,d0
beq.b squit
move.w a1,d1
.skip1 btst #1,d1
beq.b .skip2
cmpi.l #1,d0
bne.b .two
move.b (a0)+,(a1)+
rts
; cnop 0,4
.two move.w (a0)+,(a1)+ ;Zieladresse auf LONG setzen
subq.l #2,d0
beq.b squit
.skip2
cmpi.l #%0000100000010000,d0 ;prüfen, ob d0 >=2064
bcc.b bigmove
smlmove move.l d0,d1
lsr.w #2,d1 ;d0 ist hier nur noch maximal 12Bit lang
beq.b .nolong
.loop move.l (a0)+,(a1)+
subq.w #1,d1
bne.b .loop
.nolong btst #1,d0
beq.b .skip
move.w (a0)+,(a1)+ ;letztes Word uebertragen
.skip btst #0,d0
beq.b squit
move.b (a0)+,(a1)+ ;letztes Byte uebertragen
squit rts
; cnop 0,4
bigmove move.w a1,d1
btst #2,d1
beq.b .skip1
subq.l #%100,d0 ;Zieladresse auf 8-Byte-Block legen
move.l (a0)+,(a1)+
move.w a1,d1
.skip1 btst #3,d1
beq.b .dest16
subq.l #%1000,d0 ;Zieladresse auf 16-Byte-Block legen
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
.dest16 move.w a0,d1
andi.b #15,d1
bne.b bigmov ;wenn Quelladresse nicht im 16-Byte-Block liegt
move.l d0,d1
lsr.l #7,d1
.loop move16 (a0)+,(a1)+
move16 (a0)+,(a1)+
move16 (a0)+,(a1)+
move16 (a0)+,(a1)+
move16 (a0)+,(a1)+
move16 (a0)+,(a1)+
move16 (a0)+,(a1)+
move16 (a0)+,(a1)+
subq.l #1,d1
bne.b .loop
and.w #%0000000001111111,d0 ;die oberen 16 Bits werden ab hier nichtmehr berücksichtigt
bne.b smlmove
rts
; cnop 0,4
bigmov move.l d0,d1
lsr.l #6,d1
.loop move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
subq.l #1,d1
bne.b .loop
and.w #%0000000000111111,d0 ;die oberen 16 Bits werden ab hier nichtmehr berücksichtigt
bne.b smlmove
rts
cnop 0,4
**************************************************************************
Quickest
lsr.l #2,d0
cmpi.l #%0000001000000100,d0 ;prüfen, ob d0 >=2064/4
bcc.b bigmo16
smlmovQ tst.w d0 ;d0 ist hier nur noch maximal 10 Bit lang
beq.b squitQ
sloopQ move.l (a0)+,(a1)+
subq.w #1,d0
bne.b sloopQ
squitQ rts
; cnop 0,4
bigmo16 move.w a1,d1
btst #2,d1
beq.b .skip1
subq.l #1,d0 ;Zieladresse auf 8-Byte-Block legen
move.l (a0)+,(a1)+
move.w a1,d1
.skip1 btst #3,d1
beq.b .dest16
subq.l #2,d0 ;Zieladresse auf 16-Byte-Block legen
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
.dest16 move.w a0,d1
andi.b #15,d1
bne.b bigmovQ ;wenn Quelladresse nicht im 16-Byte-Block liegt
move.l d0,d1
lsr.l #5,d1
.loop move16 (a0)+,(a1)+
move16 (a0)+,(a1)+
move16 (a0)+,(a1)+
move16 (a0)+,(a1)+
move16 (a0)+,(a1)+
move16 (a0)+,(a1)+
move16 (a0)+,(a1)+
move16 (a0)+,(a1)+
subq.l #1,d1
bne.b .loop
and.w #%0000000000011111,d0 ;die oberen 16 Bits werden ab hier nichtmehr berücksichtigt
bne.b sloopQ
rts
; cnop 0,4
bigmovQ move.l d0,d1
lsr.l #4,d1
.loop move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
subq.l #1,d1
bne.b .loop
and.w #%0000000000001111,d0 ;die oberen 16 Bits werden ab hier nichtmehr berücksichtigt
bne.b sloopQ
rts
cnop 0,4
PatchEnd